<?php
//导入库文件
include("geoipcity.inc");
include("geoipregionvars.php");


//获取客户端IP的函数
function getClientIP()
{
    if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
    {
        $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
    }
    elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
    {
        $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
    }
    elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
    {
        $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
    }
    elseif (getenv("HTTP_X_FORWARDED_FOR"))
    {
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    }
    elseif (getenv("HTTP_CLIENT_IP"))
    {
        $ip = getenv("HTTP_CLIENT_IP");
    }
    elseif (getenv("REMOTE_ADDR"))
    {
        $ip = getenv("REMOTE_ADDR");
    }
    else
    {
        $ip = false;
    }
    return $ip;
}

//如果传递的查询参数为空
if(empty($_GET['q']))
{
    $ip = getClientIP();
    if(!$ip)
    {
        echo 'alert("Cannot get your IP address!");';
        die();
    }
}

//如果传递的查询参数不为空
else
{    //探测字符串是否为IP的正则表达式
    $pattern = "/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/";
    
    if(preg_match($pattern, $_GET['q']))   //如果查询的信息为IP
    {
        $ip = $_GET['q'];
    }
    else     //如果查询的信息为域名
    {
        $ip = gethostbyname($_GET['q']);  //若域名查询成功，则返回的字符串为IP
        if(!preg_match($pattern, $ip))  //检测是否返回IP，若未返回IP，即域名查询失败，报错
        {
            echo 'alert("Invalid Input!"); ';
            die();
        }
    }
}

//如果取消下一行将使用共享内存打开GeoLiteCity数据库，可加快查询。但前提是服务器支持共享内存
//$gi = geoip_open("./GeoLiteCity.dat",GEOIP_MEMORY_CACHE);

//以常规方式打开GeoLiteCity数据库，一般情况下都可以使用
$gi = geoip_open("./GeoLiteCity.dat",GEOIP_STANDARD);

//以上是假定GeoLiteCity数据库和PHP文件在同一个目录，故使用"./GeoLiteCity.dat"为路径
//如果不是，请改为实际目录

//获取IP的信息
$record = geoip_record_by_addr($gi, $ip);

//关闭数据库
geoip_close($gi);

//如果获取了相关数据
if($record)
{
    echo 'loadGeoInfo('.
                  '"'.   $_GET['q']   .'",'.  //原始查询信息
                  '"'.   $ip   .'",'.  //被查IP
                  '"'.   $record->country_code   .'",'.  //国家代码（两位）
                  '"'.   $record->country_code3  .'",'.  //国家代码（三位）
                  '"'.   $record->country_name   .'",'.  //国家名称
                  '"'.   $GEOIP_REGION_NAME[$record->country_code][$record->region]   .'",'.  //地区名称
                  '"'.   $record->city   .'",'.  //城市名称
                  $record->latitude   .','.  //纬度
                  $record->longitude   .')';  //经度
}
//如果数据库中不存在相关数据
else
{
    echo 'alert("The Information for '.$ip.' is not available now!"); ';
}

?>
